package displayboardinfo.messages;

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.Hibernate;

import displayboardinfo.entities.Patient;

/**
 * Odpowiedź usługi listowania pacjentów.
 * Zobacz również: {@link displayboardinfo.services.PatientsServices#list()}
 * 
 * @author Artur Jaworski
 */
@XmlRootElement
public class ListPatientsRes {
	
	private ArrayList<Patient> patients;

	/**
	 * Domyślny konstruktor bezargumentowy
	 */
	public ListPatientsRes() {
		setPatients(new ArrayList<Patient>());
	}
	
	/**
	 * Pobranie listy pacjentów.
	 * 
	 * @return lista pacjentów
	 */
	@XmlElementWrapper ( name = "patients" )
	@XmlElement ( name = "patient" )
	public ArrayList<Patient> getPatients() {
		return patients;
	}

	/**
	 * Ustawienie listy pacjentów.
	 * Pojedynczych pacjentów należy dodawać używając metody {@link #addPatient(Patient)}
	 * 
	 * @param patients lista pacjentów
	 */
	public void setPatients(ArrayList<Patient> patients) {
		this.patients = patients;
	}
	
	/**
	 * Dodanie pojedynczego pacjenta do listy pacjentów.
	 * W celu uniknięcia odwołań cyklicznych zerowane są następujące pola:
	 * <ul>
	 * <li> {@link Patient#getVisits()} </li>
	 * </ul>
	 * 
	 * @param patient pacjent dodawany do listy
	 */
	public void addPatient(Patient patient){
		Hibernate.initialize(patient);
		
		patient.setVisits(null);

		this.patients.add(patient);
	}
	
}
